package org.compression.util;

import java.util.HashSet;
import java.util.Iterator;

public class SetUtil<T> {

	 
    /**
     *  判断A是否被B完全包含，如果包含则返回true，否则返回false，并且打印没有被包含的变量
     * @param A  待验证的变量集  例如京东信用分的变量集
     * @param B  所有变量的set，  例如分开节点3150调用策略引擎的参数key集
     * @return  boolean
     */
    public boolean BContainsA(HashSet<T> A, HashSet<T> B){
        //A 和 B 的交集
        HashSet<T> jiaoji = new HashSet<>();
        jiaoji.addAll(A);
        jiaoji.retainAll(B);
        //A B 的交集size 等于 A的size 说明 B完成包含A
        boolean result = false;
 
        if (jiaoji.size() == A.size()){
            result = true;
        }else {
            System.out.println("====以下差异结果=====");
            System.out.println("第一个Set==" + A.toString());
            System.out.println("第二个Set==" + B.toString());
            System.out.println("第一个set不在第二个set中的部分：" + chajiSet(A,B));
            System.out.println("第二个set不在第一个set中的部分：" + chajiSet((HashSet<T>) B,A));
        }
        return result;
    }
 
    /**
     *
     * @param A
     * @param B
     * @return 返回A-B的结果集 即 A不在B中的部分
     */
    public HashSet<T> chajiSet(HashSet<T> A, HashSet<T> B){
        //A与B的差集
        HashSet<T> chaji = new HashSet<>();
        chaji.addAll(A);
        chaji.removeAll(B);
        return chaji;
    }
 
    /**
     *
     * @param A
     * @param B
     * @return  返回A与B的交集集 即 A在B中的部分
     */
    public HashSet<T> jiaojiSet(HashSet<T> A, HashSet<T> B){
        //A与B的差集
        HashSet<T> chaji = new HashSet<>();
        chaji.addAll(A);
        chaji.retainAll(B);
        return chaji;
    }
 
    public HashSet<String> keyStartWith(HashSet<String> paraSet, String startStr){
        HashSet<String> result = new HashSet<>();
        Iterator<String> iterator = paraSet.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if (next.startsWith("zr")){
                result.add(next);
            }
        }
        return result;
    }
}
